<?php

namespace App\Service;

use App\Models\User;

class TokenService
{
    // 用户信息
    protected User $user;
    // 生成token
    /**
     * 生成token
     * @param User $user
     * @return string
     */
    public function createToken(User $user): string
    {
        $user = $user->toArray();
        $token = md5($user['id'] . time());
        $this->cacheToken($token, $user);
        return $token;
    }

    // 使用redis缓存token，设置过期时间为1小时
    /**
     * 缓存token,默认缓存俩个小时，如果用户设置了token过期时间，则使用用户设置的时间
     * @param $token
     * @param array $user
     * @return void
     */
    public function cacheToken($token, array $user): void
    {
        cache([$token => $user],empty($user['token_expire']) ? 7200 : $user['token_expire']);
    }

    // 根据token获取用户信息

    /**
     * 根据token获取用户信息
     * @param string $token
     * @return array|null
     */
    public function getUserByToken(string $token): array|null
    {
        return cache($token);
    }

    /**
     * 删除token
     * @param array|string|null $token
     * @return void
     */
    public function deleteToken(array|string|null $token): void
    {
        cache()->forget($token);
    }
}
